package org.fujay.langchain4jserver.domain.model.service;

import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.StreamingChatModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import org.fujay.langchain4jserver.domain.model.aggregate.Model;

/**
 * 模型提供者领域服务接口 (由基础设施层实现，适配具体的模型工厂)
 */
public interface ModelProviderService {

    /**
     * 根据领域模型配置获取对应的聊天语言模型实例
     *
     * @param model 领域模型实体
     * @return ChatModel 实例
     * @throws IllegalArgumentException 如果模型配置无效或无法创建实例
     */
    ChatModel getChatModel(Model model);

    /**
     * 获取流式LLM模型
     *
     * @param model 模型领域聚合根
     * @return StreamingChatModel
     * @author sunliming
     */
    StreamingChatModel getStreamingChatModel(Model model);

    /**
     * 根据领域模型配置获取对应的嵌入模型实例
     *
     * @param model 领域模型实体 (必须是 BGE 类型)
     * @return EmbeddingModel 实例
     * @throws IllegalArgumentException 如果模型不是嵌入类型、配置无效或无法创建实例
     */
    EmbeddingModel getEmbeddingModel(Model model);
}
